Tableauデータ抽出APIによる抽出ファイル (TDE) の作成
Tableauのデータ抽出APIを利用することによって、データ抽出 (TDE) ファイルを直接作成する方法をご紹介します。 データ抽出APIは C/C++、Java および Pythonで動作します。Linux及びWindowsのどちらのOSからもTDEファイルを生成できます。Tableauは、それらの抽出ファイルにネイティブに接続可能できます。
- データ抽出 API – Python – 32 ビット
- データ抽出 API – Python – 64 ビット
- データ抽出 API - C/C++/Java – 32 ビット
- データ抽出 API - C/C++/Java – 64 ビット
今回はAmazon LinuxからPythonのデータ抽出API(64Bit)の利用方法について解説します。
ダウンロード
Tableauページにログイン(要ユーザー登録/無料)後、以下ページにアクセスし、『DOWNLOAD THE EXTRACT API NOW』をクリック。
別ウインドウが起動するので、チェックボックスを選択して『DOWNLOAD NOW』を押下。
各種APIのダウンロード画面に遷移します。Linux系、Windows系双方で展開されている事が確認出来ます。
Linux用Python版64bitのものをダウンロード&展開してみたもののスクリーンショットです。
APIドキュメントやサンプルについても充実している様です。実際の内容や挙動についてはこの辺りを御覧頂けます。
インストール
インストールした環境のPythonはバージョン2.6.9です。データ抽出APIは各言語のAPIと共有ライブラリ(.soや.dll)が配布提供されています。
$ python -V Python 2.6.9 $ tar xfz TDE-API-Python-Linux-64Bit.gz $ ll drwxrwxr-x 5 ec2-user ec2-user 4096 12月 13 03:07 DataExtract-8300.14.1212.0958 $ sudo python setup.py build running build running build_py creating build : : symbolically linking build/lib/dataextract/lib/libicutu.so.50 -> libicutu.so.50.1.2 $ sudo python setup.py install --record uninstall_files.txt running install running build running build_py symbolically linking build/lib/dataextract/lib/libicule.so.50 -> libicule.so.50.1.2 : : writing list of installed files to 'uninstall_files.txt'
※ アンインストールの方法
cat uninstall_files.txt | xargs rm -rvf
2015/1/14 補足:Windows環境へのインストール C:\Python27\Lib\の下にTableauディレクトリを作成し、その下にダウンロードしたファイルを展開します。展開したDataExtract-8300.14.1212.0958ディレクトリの下に移動してインストールコマンドを実行します。
C:\> cd C:\Python27\Lib\Tableau\DataExtract-8300.14.1212.0958 C:\Python27\Lib\Tableau\DataExtract-8300.14.1212.0958> python setup.py install
データ抽出ファイルの作成
データ抽出ファイルの手順
- Step 1:抽出ファイルのオープン
- Step 2:テーブルに含まれるカラムを定義
- Step 3:テーブルの追加
- Step 4:データの登録
- Step 5:抽出ファイルのクローズ
Step 1:抽出ファイルのオープン
抽出ファイル名を指定してオープンします。ファイルが存在しない場合は新規に作成され、ファイルが存在する場合は既存のファイルにレコードを追加することができます。
extract = Extract(filename)
Step 2:テーブルに含まれるカラムを定義
テーブルのカラムを定義します。抽出ファイルのデータ型は以下の8種類です。
tableDef = TableDefinition() tableDef.addColumn('id', Type.INTEGER) tableDef.addColumn('value', Type.DOUBLE) tableDef.addColumn('code', Type.CHAR_STRING) tableDef.addColumn('flag', Type.BOOLEAN) tableDef.addColumn('duration', Type.DURATION) tableDef.addColumn('text', Type.UNICODE_STRING) tableDef.addColumn('expiration', Type.DATE) tableDef.addColumn('created', Type.DATETIME)
Step 3:テーブルの追加
テーブル名として"Extract"を指定します。"Extract"以外を指定するとエラーとなります。よって、抽出ファイルには1つのテーブル("Extract")以外は登録できませんでした。
table = extract.addTable('Extract', tableDef)
Step 4:データの登録
row = Row(tableDef) for i in range(1, 100): row.setInteger(0, i) row.setDouble(1, i*100) row.setCharString(2, 'AD' + str(i)) row.setBoolean(3, 'true') row.setDuration(4 ,1 ,6 ,3 , 10, 15) row.setString(5, u'') row.setDate(6, 2020, 1, 1); row.setDateTime(7, 2015, 1, 12, 12, 15, 45, 4550); table.insert(row)
Step 5:抽出ファイルのクローズ
Step 1のオープンに対するクロースです。
extract.close()
データ抽出ファイルの作成のサンプルコード
#!/usr/bin/python # -*- coding: utf-8 -*- from dataextract import * import os # 抽出ファイル名 filename = 'sample.tde' # Step 0 既存の抽出ファイルを削除 if os.path.exists(filename): os.remove(filename) # Step 1 抽出ファイルのオープン extract = Extract(filename) # Step 2 テーブルに含まれるカラムを定義 tableDef = TableDefinition() tableDef.addColumn('id', Type.INTEGER) tableDef.addColumn('value', Type.DOUBLE) tableDef.addColumn('code', Type.CHAR_STRING) tableDef.addColumn('flag', Type.BOOLEAN) tableDef.addColumn('duration', Type.DURATION) tableDef.addColumn('text', Type.UNICODE_STRING) tableDef.addColumn('expiration', Type.DATE) tableDef.addColumn('created', Type.DATETIME) # Step 3 テーブルの追加 table = extract.addTable('Extract', tableDef) # Step 4 データの登録 row = Row(tableDef) for i in range(1, 100): row.setInteger(0, i) row.setDouble(1, i*100) row.setCharString(2, 'AD' + str(i)) row.setBoolean(3, 'true') row.setDuration(4 ,1 ,6 ,3 , 10, 15) row.setString(5, u'もちろん日本語もOKです!') row.setDate(6, 2020, 1, 1); row.setDateTime(7, 2015, 1, 12, 12, 15, 45, 4550); table.insert(row) # Step 5 抽出ファイルのクローズ extract.close()
付属のサンプルコードの紹介
抽出ファイルAPIのアーカイブには有益なサンプルコードがりますのでご紹介します。ファイルは"samples"ディレクトリ以下にあります。
$ ll DataExtract-8300.14.1212.0958/samples/ 合計 20 -rw-r--r-- 1 ec2-user ec2-user 5336 12月 13 02:59 csv2tde.py -rw-r--r-- 1 ec2-user ec2-user 2656 12月 13 02:59 makeorder.py -rw-r--r-- 1 ec2-user ec2-user 209 12月 13 02:59 orders.csv -rw-r--r-- 1 ec2-user ec2-user 156 12月 13 02:59 schema.ini
抽出ファイルを作成 - makeorder.py
抽出ファイルをオープンする際のエラーハンドリングで、抽出ファイルの重複チェックする方法が紹介されています。
CSVファイルから抽出ファイル(TDE)を作成 - csv2tde.py
データソースであるCSVファイル(orders.csv)やテーブルに含まれるカラムを定義(schema.ini)を外部ファイルから読み込むようになっていたり、一般的なデータ型と抽出ファイルのデータ型とのマッピングについてもあり、より実践的なサンプルとして利用できそうです。
まとめ
テーブル名に"Extract"以外を指定するとエラーとなり、抽出ファイルには1つのテーブル("Extract")以外は登録できませんので、複数テーブルを利用する場合は抽出ファイルを複数作成し、データブレンディングする必要があります。 データ抽出APIのエンジンはネイティブの共有ライブラリ(so、dll)として提供されており、高速に動作することが期待できます。既存の異なるデータソースをデータ抽出ファイルに変換して活用していただければ幸いです。